package com.whfc.mach.dao;

import com.whfc.mach.dto.*;
import com.whfc.mach.entity.AppMach;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface AppMachMapper {
    int deleteByPrimaryKey(Integer id);

    int insertSelective(AppMach record);

    AppMach selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(AppMach record);

    int updateByPrimaryKey(AppMach record);

    /**
     * 逻辑删除设备
     *
     * @param id
     */
    void logicDeleteById(@Param("id") Integer id);

    /**
     * 查询设备列表
     *
     * @param deptIds
     * @return
     */
    List<AppMachDTO> selectMachDTOList(@Param("deptIds") List<Integer> deptIds);

    /**
     * 查询设备详细信息
     *
     * @param id
     * @return
     */
    AppMachDTO selectMachDTOById(@Param("id") Integer id);

    /**
     * 获取设备的基本信息
     *
     * @param machId
     * @return
     */
    AppMachDTO selectMachInfo(@Param("machId") Integer machId);

    /**
     * 根据设备SN查找 mach ID
     *
     * @param deviceSnList 设备SN
     * @return mach ID列表
     */
    List<Integer> selectMachIdByDeviceSn(@Param("deviceSnList") List<String> deviceSnList);

    /**
     * 根据设备SN获取设备信息
     *
     * @param deviceSnList SN
     * @return 设备信息
     */
    List<AppMachDTO> getMachListByDeviceSn(@Param("deviceSnList") List<String> deviceSnList);

    /**
     * 根据设备SN列表查找设备
     *
     * @param deviceSnList 设备SN列表
     * @return 设备
     */
    List<AppMachDTO> selectMachBySnList(@Param("deviceSnList") List<String> deviceSnList);

    /**
     * 根据城市统计设备
     *
     * @param deviceSnList 设备SN列表
     * @param province     省份
     * @return 设备统计
     */
    List<MachCityCountDTO> countMachByCity(@Param("deviceSnList") List<String> deviceSnList, @Param("province") String province);

    /**
     * 根据城市统计设备
     *
     * @param deviceSnList 设备SN列表
     * @return 设备统计
     */
    List<MachCityCountDTO> countMachByProvince(@Param("deviceSnList") List<String> deviceSnList);

    /**
     * 查询设备列表
     *
     * @param deptIds
     * @param bindFlag
     * @param corpId
     * @param keyword
     * @param machType
     * @param netState
     * @param state
     * @param workState
     * @param machId
     * @return
     */
    List<AppMachDTO> selectMachList(@Param("deptIds") List<Integer> deptIds,
                                    @Param("bindFlag") Integer bindFlag,
                                    @Param("corpId") Integer corpId,
                                    @Param("keyword") String keyword,
                                    @Param("machType") List<Integer> machType,
                                    @Param("netState") Integer netState,
                                    @Param("state") Integer state,
                                    @Param("workState") Integer workState,
                                    @Param("machId") Integer machId);


    /**
     * 更新设备的qr信息
     *
     * @param machId
     * @param qr
     */
    void updateQrByMachId(@Param("machId") Integer machId, @Param("qr") String qr);

    /**
     * 更新设备油箱
     *
     * @param machId
     * @param oilTankHeight
     * @param oilTankVolume
     */
    void updateTank(@Param("machId") Integer machId, @Param("oilTankHeight") Double oilTankHeight, @Param("oilTankVolume") Double oilTankVolume);

    /**
     * 设备进场
     *
     * @param machId
     */
    void updateEnterStateByMachId(@Param("machId") Integer machId, @Param("time") Date time);

    /**
     * 设备出场
     *
     * @param machId
     */
    void updateOuterStateByMachId(@Param("machId") Integer machId, @Param("time") Date time);

    /**
     * 更新app_mach中设备的绑定信息、
     *
     * @param machId
     * @param bindFlag
     * @param sn
     * @param deviceId
     * @param deviceType
     */
    void updateBindFlagByMachId(@Param("machId") Integer machId, @Param("bindFlag") Integer bindFlag, @Param("sn") String sn, @Param("deviceId") Integer deviceId, @Param("deviceType") Integer deviceType);

    /**
     * 查找设备的基本信息
     *
     * @param deptIds
     * @return
     */
    List<AppMachDTO> selectMachDTOByDeptIds(@Param("deptIds") List<Integer> deptIds);

    /**
     * 查找大屏的设备列表
     *
     * @param deptIds
     * @return
     */
    List<AppMachDTO> selectBoardMachDTOList(@Param("deptIds") List<Integer> deptIds);

    /**
     * 三维模型-查找设备信息s
     *
     * @param deptIds
     * @return
     */
    List<GisMachDTO> selectGisMachData(@Param("deptIds") List<Integer> deptIds);

    /**
     * 根据设备SN查找设备
     *
     * @param deviceSn
     * @return
     */
    AppMach selectMachByDeviceSn(@Param("deviceSn") String deviceSn);

    /**
     * 查找开放平台的设备列表
     *
     * @param deptId
     * @return
     */
    List<OpenApiMachDTO> selectOpenApiMachDTOList(@Param("deptId") Integer deptId);

    /**
     * 查找开放平台的单台设备信息
     *
     * @param machId
     * @return
     */
    OpenApiMachDTO selectOpenApiMachDTO(@Param("machId") Integer machId);

    /**
     * 查询小程序的设备列表
     *
     * @param deptIds
     * @param machTypeIds
     * @param corpIds
     * @param bindFlag
     * @param keyword
     * @return
     */
    List<AppMachDTO> selectWxMachList(@Param("deptIds") List<Integer> deptIds, @Param("machTypeIds") List<Integer> machTypeIds, @Param("corpIds") List<Integer> corpIds, @Param("bindFlag") Integer bindFlag, @Param("keyword") String keyword);

    /**
     * 查找设备类型列表
     *
     * @param deptIds
     * @return
     */
    List<AppMachTypeDTO> selectMachTypeList(@Param("deptIds") List<Integer> deptIds);

    /**
     * 通过组织机构和设备编号查找
     *
     * @param deptId
     * @param machCode
     * @return
     */
    AppMach selectByDeptIdAndMachCode(@Param("deptId") Integer deptId, @Param("machCode") String machCode);

    AppMach selectByMachCode(@Param("machCode") String machCode);

    /**
     * 根据设备id集合查找设备
     *
     * @param machIds
     * @return
     */
    List<AppMachDTO> selectByMachIds(@Param("machIds") List<Integer> machIds);

    /**
     * 根据组织机构查找
     *
     * @param deptId
     * @return
     */
    List<AppMachDTO> selectByDeptId(@Param("deptId") Integer deptId);

    /**
     * 查找需要保养检测的设备
     *
     * @param deptId
     * @return
     */
    List<AppMachDTO> selectObdMach(@Param("deptId") Integer deptId);

    /**
     * 查询设备绑定解绑记录
     *
     * @param deptId
     * @param date
     * @return
     */
    MachLogNumDTO selectTodayByDeptId(@Param("deptId") Integer deptId, @Param("date") Date date);

    /**
     * 根据组织机构id列表查找设备ID
     *
     * @param deptIdList 组织机构ID列表
     * @return 设备ID列表
     */
    List<Integer> selectMachIdByDeptIdList(@Param("deptIdList") List<Integer> deptIdList);

    /**
     * 验证组织机构下面是否有该设备
     *
     * @param deptIdList 组织机构ID列表
     * @param machId     设备ID
     * @return 设备ID
     */
    Integer selectByDeptIdsAndMachId(@Param("deptIdList") List<Integer> deptIdList, @Param("machId") Integer machId);

    /**
     * 查找可供选择的设备
     *
     * @param deptIds
     * @param keyword
     * @param deviceType
     * @param state
     * @param bindFlag
     * @return
     */
    List<AppMachDTO> selectAvailableMachDTO(@Param("deptIds") List<Integer> deptIds, @Param("keyword") String keyword, @Param("deviceType") Integer deviceType, @Param("state") Integer state, @Param("bindFlag") Integer bindFlag, @Param("machType") Integer machType);
}